package br.com.duosoftware.orcamento.daos;

import br.com.duosoftware.orcamento.entidades.Dotacao;
import br.com.duosoftware.orcamento.entidades.Orcamento;
import java.util.List;

/**
 *
 * @author Renato
 * 
 */
public class OrcamentoDAO extends DAOGenerico {
    
    public void salvarOuAtualizar(Orcamento orcamento) {
        salvarOuAtualizarPojo(orcamento);
    }

    public void excluir(Orcamento orcamento) {
        excluirPojo(orcamento);
    }

    public Orcamento getOrcamentoPorId(Integer id) {
        return getPojo(Orcamento.class, id);
    }
    
    /*public synchronized Integer obterSequencia(String dotacao) {

        Integer result = getPojoCriterio("SELECT max(orcamento.fichaDespesa) "
                                       + "FROM Orcamento orcamento "
                                       + "WHERE orcamento.dotacao.dotacao LIKE ?"
                                       , dotacao);

        result = result == null ? 1 : result++; 
        
        return result;

    }*/
    public synchronized Integer obterSequencia() {

        Integer result = getPojoCriterio("SELECT MAX(orcamento.fichaDespesa) "
                                       + "FROM Orcamento orcamento ");
        
        result = result == null ? 1 : ++result; 
        
        return result;

    }
    
    public List<Orcamento> listarOrcamentos() {
        return getPojos("FROM Orcamento orcamento ORDER BY orcamento.id");
    }
    
    public List<Orcamento> listarOrcamentos(Dotacao dotacao) {
        return getPojos("FROM Orcamento orcamento "
                      + "WHERE orcamento.dotacao.id = ? "
                      + "ORDER BY orcamento.id", dotacao.getId());
    }
    
    public double obterSomaDoValorDasDespesas(Dotacao dotacao) {

        double resultado = 0.0;

        try {

            resultado = getPojoCriterio("SELECT SUM(orcamento.valorDespesa) "
                    + "FROM Orcamento orcamento "
                    + "WHERE orcamento.dotacao.id = ?", dotacao.getId());

        } catch (Exception e) {

        }

        return resultado;

    }
   
}
